/* ---------- 第三方依赖 ---------- */
import isString from "xe-utils/isString" // 检查字符

/* ---------- 内部依赖 ---------- */
import decrypt from "./src/decrypt.js" // 解密
import encrypt from "./src/encrypt.js" // 加密

// AES加密
export default new Proxy(__AES_16KEY__, {
    // 调用
    get(password, key) {
        // 检查调用
        if (key === "decrypt" || key === "encrypt") {
            /**
             * 返回一个方法
             * @param {String} content 内容
             * @param {String} password 密钥
             */
            return (content, password) => {
                // 检查参数
                if (!!!content && !!!password && isString(password)) {
                    return { decrypt, encrypt }(key)(content, password) // 调用加解密
                }

                // 没有内容直接丢回去
                else { return content }
            }
        }

        // 返回空值
        else { return undefined }
    },

    // 设置
    set(password, key, value) {
        // 更新密钥
        if (key === "password" && isString(value)) {
            password = value // 写入
            return true
        }

        // 其他输入直接报错
        else { return false }
    },

    // 删除
    deleteProperty(db, key) {
        throw new ReferenceError(`What are you doing?`)
    }
})